Backdrop

백준 온라인 저지 ▸ 1008

A/B

문제

두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

첫째 줄에 A/B를 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다.

예제 입력 1

1 3

예제 출력 1

0.33333333333333333333333333333333

10-9 이하의 오차를 허용한다는 말은 꼭 소수 9번째 자리까지만 출력하라는 뜻이 아니다.

예제 입력 2

4 5

예제 출력 2

0.8

풀이

A+B (1000)를 먼저 풀어보세요!

이론

실수

실수는 정수와 달리 소수점이 있는 수를 말해요. 자바스크립트에서는 실수를 Number 타입으로 표현해요.

const a = 1.5;
const b = 2.5;

컴퓨터에서 실수 표현하기

컴퓨터에서 실수를 표현하는 방식에는 고정소수점 방식과 부동소수점(떠돌이 소수점) 방식이 있어요. 고정소수점 방식은 소수점의 위치를 고정시켜 표현하는 방식이고, 부동소수점 방식은 소수점의 위치를 고정하지 않고 표현하는 방식이에요.

부동소수점은 고정소수점 방식보다 표현 범위가 넓고, 정밀도가 높아요. 그래서 컴퓨터에서 실수를 표현할 때는 부동소수점 방식을 사용해요.

부동소수점

부동소수점 방식은 유효숫자를 나타내는 가수와 소수점의 위치를 나타내는 지수로 나누어 표현해요. 예를 들어 123.456을 표현한다면 1.23456 * 10^2로 표현할 수 있어요. 여기서 1.23456을 가수, 2를 지수라고 해요.

컴퓨터에서는 가수와 지수를 이진수로 표현해요. 가수는 2진수로 표현하고, 지수는 2진수로 표현한 뒤 특정한 방식으로 표현해요. 더 자세한 내용은 IEEE 754를 참고하세요.

자바스크립트에서는 64비트 부동소수점 방식으로 실수를 표현해요. 64비트 부동소수점 방식은 가수를 52비트, 지수를 11비트, 부호를 1비트로 표현해요. C언어의 double 타입과 같아요.

실수의 오차

컴퓨터에서 실수를 표현할 때는 이진수로 표현하기 때문에 0.1과 같은 십진수를 정확히 표현할 수 없어요. 그래서 실수를 표현할 때는 오차가 발생할 수 있어요.

console.log(0.1 + 0.2); // 0.30000000000000004

절대 오차와 상대 오차

실수를 표현할 때 발생하는 오차는 절대 오차와 상대 오차가 있어요. 절대 오차는 실제 값과 컴퓨터에서 표현한 값의 차이를 말해요. 상대 오차는 절대 오차를 실제 값으로 나눈 값이에요.

const a = 0.1 + 0.2;
const b = 0.3;
 
console.log(a - b); // 5.551115123125783e-17
console.log((a - b) / b); // 1.8503717077085943e-16

부동소수점의 상대 오차

64비트 부동소수점 방식의 상대 오차는 10-15 정도에요. 32비트 부동소수점 방식의 상대 오차는 10-7 정도에요.

자바스크립트에서는 64비트 부동소수점 방식을 사용하기 때문에 상대 오차가 10-15 정도에요. 따라서 그냥 계산해도 주어진 조건을 만족해요.

코드

const fs = require('fs');
const [a, b] = fs.readFileSync(0).toString().split(' ').map(Number);
 
console.log(a / b);